/**
 * @Author lzc
 * @Date 2022/8/31 10:22
 */
public class LambdaDemo2 {
    public static void main(String[] args) {
        
        /*test(new B() {
            @Override
            public void fun() {
                System.out.println("匿名内部类的实现....");
            }
        });*/
    
        //test(() -> System.out.println("匿名内部类的实现...."));
        
        
        /*test1(new C() {
            @Override
            public String fun(User user) {
                return user.getName();
            }
        });*/
    
//        test1(user -> user.getName());
        test1(User::getName);  // 方法引用: 类名::方法名 , 是对特殊lambda表达式的替换
    }
    
    public static void test1(C C){
        String name = C.fun(new User("lisi"));
        System.out.println(name);
    }
    
    
    public static void test(B b){
        b.fun();
    }
    
    
}

interface C{
    String fun(User user);
}

class User{
    private String name;
    
    public User(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}



interface B {
    void fun();
}

/*
java中的函数: lambda表达式(拉姆达表达式)

接口:
    interface
        常量
        抽象方法
        默认方法(default)

函数式接口:
    如果一个接口中只有一个抽象方法, 这样的接口就是函数式接口.
    
    如果一个类型是函数式接口类型, 则创建对象的时候可以使用lambda表示
 
 */